import axios, { AxiosError } from "axios";

// 创建 Axios 实例
// 区分开发和生产环境
const DEV_BASE_URL = ""; // 修改为 /api，确保请求被正确代理
const PROD_BASE_URL = "http://xx.xx.xx.xx";

// 根据环境变量判断使用哪个baseURL
const baseURL = process.env.NODE_ENV === 'production' ? PROD_BASE_URL : DEV_BASE_URL;

const myAxios = axios.create({
    baseURL,
    timeout: 30000, // 增加超时时间到30秒
    withCredentials: true, // 改回 true，允许发送认证信息
    headers: {
        'Content-Type': 'application/json',
        'Accept': 'application/json',
        'X-Requested-With': 'XMLHttpRequest',
    },
});

// 创建请求拦截器
myAxios.interceptors.request.use(
    function (config) {
        // 请求执行前执行
        console.log('发送请求到:', config.url);

        // 从 localStorage 获取 token（如果有的话）
        const token = localStorage.getItem('token');
        if (token) {
            config.headers['Authorization'] = `Bearer ${token}`;
        }

        return config;
    },
    function (error) {
        // 处理请求错误
        console.error('请求错误:', error);
        return Promise.reject(error);
    },
);

// 创建响应拦截器
myAxios.interceptors.response.use(
    // 2xx 响应触发
    function (response) {
        // 处理响应数据
        const { data } = response;
        // 未登录
        if (data.code === 40100 || response.status === 403) {
            // 不是获取用户信息接口，或者不是登录页面，则跳转到登录页面
            if (
                !response.request.responseURL.includes("user/get/login") &&
                !window.location.pathname.includes("/user/login")
            ) {
                /*// 清除可能过期的 token
                localStorage.removeItem('token');
                window.location.href = `/user/login?redirect=${window.location.href}`;*/
            }
        } else if (data.code !== 0 && data.code !== undefined) {
            // 其他错误，但要确保code存在
            console.error('服务器返回错误:', data);
            throw new Error(data.message ?? "服务器错误");
        }
        return data;
    },
    // 非 2xx 响应触发
    function (error: AxiosError) {
        // 处理响应错误
        if (error.response?.status === 403) {
            console.error('没有权限访问此资源，请先登录');
            // 清除可能过期的 token
            localStorage.removeItem('token');
            window.location.href = `/user/login?redirect=${window.location.href}`;
        } else if (error.code === 'ERR_NETWORK') {
            console.error('网络错误，请检查：\n1. 后端服务是否启动\n2. 后端服务端口是否是8080\n3. 是否有跨域限制');
        } else if (error.response) {
            console.error('服务器响应错误:', error.response.status, error.response.data);
        } else if (error.request) {
            console.error('未收到响应:', error.request);
        } else {
            console.error('请求配置错误:', error.message);
        }
        return Promise.reject(error);
    },
);

export default myAxios;
